/*************************************************************************************************************************
Multi-Include-Prevent Segment
**************************************************************************************************************************/
#ifndef IF_GXW_LIB_H__
#define IF_GXW_LIB_H__

/*************************************************************************************************************************
Include File Segment   当flash/rom空间不足时，可注释不使用的标准C函数头文件，以节省rom/flash空间
**************************************************************************************************************************/
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include  <stdio.h>
#include  <ctype.h>
#include  <stdarg.h> 

/*--------------- MCU head files ; MCU use different head files //不同的系列的单片机使用不同的头文件--------------------*/
#include "mf_config.h"                  /* common defines and macros for S12        */
#include "fm33fg0xxa_fl.h"				/* derivative-specific definitions for S12  */
/*----------------------------------------------------------------------------------------------------------------------*/

/*--------------- Need check type in current IDE data bits      //初次使用需要确认当前IDE 数据位类型长度----------------*/
/*--------------- Type of int/short is 16 bits,  long int is 32 bits  //确认类型 int型长度是int 是16或32位--------------*/
#include "GxwTypes.h"
/*----------------------------------------------------------------------------------------------------------------------*/

/*************************************************************************************************************************
Config Segment!!! before use lib interface must to enable corresponding define  需要使用的库函数必须先在此处 用宏定义 使能.
当flash/rom空间不足时，可注释不使用的EN_ 函数库，以节省rom/flash空间
**************************************************************************************************************************/
#define EN_GET_RANDOM_NUM

#define EN_CRC8_DIRECT
#define CRC8_POLY_J1850         0x1D

#define EN_CRC8_TABLE

#ifdef EN_CRC8_TABLE                //EN_CRC8_TABLE must select one TABLE of follow
//#define CRC8_TABLE_POLY_J1850       //POLY is 0x1D     
#define CRC8_TABLE_POLY_0X2F        //POLY is 0x2F
//#define CRC8_TABLE_POLY_0X07        //POLY is 0x07
#endif

//#define EN_CRC32_TABLE
//#define EN_CRC32_DIRECT

//#define EN_XTEA_ENCRYPT
//#define EN_AES_ENCRYPT
//#define EN_HT2_ENCRYPT

//#define EN_U8_ARRAY_GROWTH
//#define EN_U16_ARRAY_GROWTH
//#define EN_U32_ARRAY_GROWTH

//#define EN_S8_ARRAY_GROWTH
//#define EN_S16_ARRAY_GROWTH
//#define EN_S32_ARRAY_GROWTH

















/*************************************************************************************************************************
Type Segment
**************************************************************************************************************************/ 

/*************************************************************************************************************************
Define Segment
**************************************************************************************************************************/
#define UINT8_T_MAX   (0xFF)
#define INT8_T_MAX    (0x7F)
#define UINT16_T_MAX  (0xFFFF)
#define INT16_T_MAX   (0x7FFF)
#define UINT32_T_MAX  (0xFFFFFFFF)
#define INT32_T_MAX   (0x7FFFFFFF)

#define SET_UINT32_BIT(Data, Offset)     (((Data)) |= ((uint32)1 << (Offset)))   //置无符号32位变量Data 的 第 Offset 位 为1。
#define SET_UINT16_BIT(Data, Offset)     (((Data)) |= ((uint16)1 << (Offset)))   //置无符号16位变量Data 的 第 Offset 位 为1。
#define SET_UINT8_BIT(Data, Offset)      (((Data)) |= ((uint8) 1 << (Offset)))   //置无符号8 位变量Data 的 第 Offset 位 为1。

#define RESET_UINT32_BIT(Data, Offset)   (((Data)) &= ~((uint32)1 << (Offset)))  //置无符号32位变量Data 的 第 Offset 位 为0。
#define RESET_UINT16_BIT(Data, Offset)   (((Data)) &= ~((uint16)1 << (Offset)))  //置无符号16位变量Data 的 第 Offset 位 为0。
#define RESET_UINT8_BIT(Data, Offset)    (((Data)) &= ~((uint8) 1 << (Offset)))  //置无符号8 位变量Data 的 第 Offset 位 为0。


#define GET_UINT32_BIT(Data, Offset)     (((uint8)(((uint32) (Data)) >> (Offset))) & 0x01) //获取无符号32位变量Data 的 第 Offset 位。
#define GET_UINT16_BIT(Data, Offset)     (((uint8)(((uint16) (Data)) >> (Offset))) & 0x01) //获取无符号16位变量Data 的 第 Offset 位。
#define GET_UINT8_BIT(Data, Offset)      (((uint8)(((uint8 ) (Data)) >> (Offset))) & 0x01) //获取无符号8 位变量Data 的 第 Offset 位。

/*************************************************************************************************************************
Enum Segment
**************************************************************************************************************************/

/*************************************************************************************************************************
Union Segment
**************************************************************************************************************************/

/*************************************************************************************************************************
Structure Segment
**************************************************************************************************************************/

/*************************************************************************************************************************
Function Declare Segment
**************************************************************************************************************************/
// #include "FuncLib.h"
// #include "CRC.h"
// #include "AES.h"
//#include "ht2crypt.h"
                                      


#endif
